/*Includes*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <mysql/mysql.h>
#include <mysql/mysqld_error.h>
#include <winsock2.h>

#include "Prototipos.h"
#include "receberPacote.h"

# define MSG_NOTIFICAR            0x40
# define MSG_NOTIFICAR_OK         0x41

extern MYSQL conexao;
extern SYSTEMTIME SystemTime;
extern SOCKET mySocket;

void receberPacote() {
	Tmensagem MsgIn, MsgOut;
	char Buffer[1500];
	struct sockaddr_in RemoteAddr;
	int RemoteAddrSize;

	RemoteAddrSize = sizeof(RemoteAddr);
	if(recvfrom(mySocket, Buffer, sizeof(Buffer), 0,
	(struct sockaddr*)&RemoteAddr, &RemoteAddrSize) == SOCKET_ERROR) {
		puts("ERRO: Erro no socket ao tentar receber pacote.");
	//return;
  	}

	memcpy(&MsgIn, Buffer, sizeof(Tmensagem));
  
	if(MsgIn.mp.Codigo == MSG_NOTIFICAR) {
		GetSystemTime(&SystemTime);
		sprintf(Buffer, "\"%04d-%02d-%02d %02d:%02d:%02d\"",
        		SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay,
                	MsgIn.mlog.Inicio.b[1], MsgIn.mlog.Inicio.b[2],
                	MsgIn.mlog.Inicio.b[3]);

		insercao_tableRegistro(Buffer, MsgIn.mp.Origem, MsgIn.mp.Destino,MsgIn.mlog.Duracao, MsgIn.mlog.Tipo);
		printf("==Mensagem de Log de Chamada==\n  IP de Origem: ");
		showIP((_DWORD*)&RemoteAddr.sin_addr);
		MsgOut.mp.Codigo = MSG_NOTIFICAR_OK;
		MsgOut.mp.Origem = MsgIn.mp.Origem;
		MsgOut.mp.Destino = MsgIn.mp.Destino;

		sendto(mySocket, (unsigned char *)&MsgOut, sizeof(Pacote), 0,
		(struct sockaddr*)&RemoteAddr, RemoteAddrSize);
		printf("\n Ramal de Origem: %4d\n Ramal de Destino: %4d\n\n",MsgIn.mp.Origem, MsgIn.mp.Destino);
  }
}
